package creational.pattern.factory.factories;

import creational.pattern.factory.beans.Bean;
import creational.pattern.factory.factory.Bean1Produce;
import creational.pattern.factory.factory.Bean2Produce;
import creational.pattern.factory.factory.BeanProduce;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author yoyuan
 * @Description: 工厂模式
 * @DateTime: 2023/1/8 15:49
 */
public class BeanFactoryPattern {
    /**
     * 工厂模式和简单工厂的区别就是工厂模式将构造函数单独提出来了
     * 这样一来，类的数量多了，但是如果对于复杂的构造流程，这个方法更有用
     * 因为构造函数我们可以通过修改Bean1Produce和Bean2Produce，没必要修改工厂类
     * 而且这样拓展性也更好，适合构造方法比较复杂的情况
     */


    private static final Map<String, BeanProduce> beanMap = new HashMap<>();
    static {
        beanMap.put("bean1", new Bean1Produce());
        beanMap.put("bean2", new Bean2Produce());
    }
    public Bean getBean(String beanName){
        return beanMap.get(beanName).getBean();
    }
}
